home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / tos_updt / fmcity / palcom / auto / script / bbscom.mx < prev    next >
Text File  |  1995-04-11  |  21KB  |  743 lines

  1. //--------------------------------------------------------------------------//
  2. //                        PALCOM V2.1 L10                        //
  3. //                      自動通信:掲示板巡回スクリプト                        //
  4. //                                                                            //
  5. //                                        CopyRight(C) 1994/10/20                //
  6. //                                FUJITSU PERSONAL COMPUTER SYSTEMS LIMITED    //
  7. //                                        written by C-cube Soft T.Nakamura    //
  8. //--------------------------------------------------------------------------//
  9. event    @OPEN.EXTERN {
  10.     $$USER.DEFINED.9 = #FALSE;
  11.     $TrdId   = AUTO.getTrdId();
  12.     $LogId   = AUTO.getLogFileId();
  13.     $dayList = time.getDate();
  14.     $ToDay1  = str.join([data.toString2( list.getNth( $dayList, 2 ),2," ",0),
  15.                          data.toString2( list.getNth( $dayList, 3 ),2,"0",0)],
  16.                          "/" );
  17.     $ToDay2  = str.join([data.toString2( list.getNth( $dayList, 1 ),2,"0",0),
  18.                          data.toString2( list.getNth( $dayList, 2 ),2,"0",0),
  19.                          data.toString2( list.getNth( $dayList, 3 ),2,"0",0)],
  20.                          "" );
  21.     sys.global( $TrdId  );
  22.     sys.global( $LogId  );
  23.     sys.global( $ToDay1 );
  24.     sys.global( $ToDay2 );
  25.     $ret = trd.checkList( $TrdId, [1,4,-2] );
  26.     if( list.get1st( $ret ) == 0 ) {
  27.         //---   掲示板のグループが無いので初回アクセスとみなす   ---//
  28. NEWMAKE:xfer.pauseText(  $LogId );
  29.         trd.setData( $TrdId, [1,5],"1" );
  30.         $ret = Auto.makeBbsNew();
  31.         if( list.get1st( trd.checkList( $TrdId, [1,5] )) != 0 ) {
  32.             trd.delData( $TrdId, [1,5] );
  33.         }
  34.         xfer.resumeText( $LogId );
  35.         $$USER.DEFINED.9 = $ret;
  36.         return;
  37.     }
  38.  
  39.     //---   データベースファイルとの連携を取る   ---//
  40.     $ret      = Auto.connectBbsData( AUTO.getBbsData(), [1,4] );
  41.     if( $ret == #FALSE ) {
  42.         goto NEWMAKE;
  43.     }
  44.     $dataList = list.getNth( $ret, 2 );
  45.  
  46.     //---   掲示板を巡回する必要があるかどうかチェック   ---//
  47.     $setDataList = AUTO.getSetData();
  48.     $topList     = list.getNth( $setDataList, 1 );
  49.     $upList      = AUTO.getUpList( 14 );
  50.     $dwFlg       = list.getNth( list.getNth( $topList, 5 ), 1 );
  51.     $upFlg       = list.getNth( list.getNth( $topList, 5 ), 2 );
  52.     $st          = 0;
  53.     $retInf      = #TRUE;
  54.     if(( $dwFlg == #TRUE )&&( list.get1st( $ret ) == #TRUE )) {
  55.         $st = 1;
  56.     }
  57.     if(( $upFlg == #TRUE )&&( list.size( $upList ) != 0 )) {
  58.         $st = $st | 2;
  59.     }
  60.     if( list.get1st( trd.checkList( $TrdId, [1,5] )) != 0 ) {
  61.         trd.delData( $TrdId, [1,5] );
  62.         AUTO.setTrdUpdateFlg();
  63.         $st = $st | 4;
  64.     }
  65.     if( $st != 0 ) {
  66.         //---   掲示板巡回制御   ---//
  67.         sys.stopIntRec();
  68.         $retInf = Auto.bbsCom("GO BBS\r","",$dataList, [1,4], 0, $st, $upList);
  69.         sys.startIntRec();
  70.     }
  71.     $$USER.DEFINED.9 = $retInf;
  72.     return;
  73. }
  74. event    @CLOSE.EXTERN {
  75.     sys.local( $TrdId  );
  76.     sys.local( $LogId  );
  77.     sys.local( $ToDay1 );
  78.     sys.local( $ToDay2 );
  79.     sys.startIntRec();
  80.     return;
  81. }
  82. event    @ERROR {
  83.     sys.startIntRec();
  84.     AUTO.fatalError();
  85.     event.mainLoop();
  86. }
  87.  
  88.  
  89.  
  90. //--------------------------//
  91. //---   掲示板巡回制御   ---//
  92. //--------------------------//
  93. function    Auto.bbsCom( $cmd,$title,$dataList,$tag,$mode,$status,$upList ) {
  94.     $AUTO.WAIT15 = AUTO.getWaitChar( 15 );
  95.     $AUTO.WAIT60 = AUTO.getWaitChar( 60 );
  96.  
  97.     AUTO.putStr2( $cmd );
  98.     $ret = Auto.getBbsMenu( $mode );
  99.     if( $mode == 0 ) {
  100.         if( $ret == #FALSE ) {
  101.             //---   掲示板に入れなかった   ---//
  102.             return( #FALSE );
  103.         }
  104.     }
  105.     $titleList = list.getNth( $ret, 1 );
  106.     $noList    = list.getNth( $ret, 2 );
  107.  
  108.     if( $mode == 0 ) {
  109.         AUTO.sendCommand("SET LINE 10");
  110.         AUTO.sendCommand("SET MENU OFF");
  111.         AUTO.sendCommand("SET PAGE OFF");
  112.     }
  113.  
  114.     if( list.size( $titleList ) == 0 ) {
  115.         //---   サブメニューが無くなってしまった   ---//
  116.         $errMsg =  ["メニューの構成が設定と相違しています。",
  117.                     "巡回を中断しました。",
  118.                     "データベースファイルを更新しました。",
  119.                     str.join(["掲示板名:", $title], "" )];
  120.         AUTO.error( "掲示板巡回", $errMsg );
  121.         $tagSub = list.putLast( data.copy( $tag ), -2 );
  122.         if( trd.count( $TrdId, $tagSub ) != 0 ) {
  123.             trd.delData( $TrdId, $tagSub );
  124.         }
  125.         trd.setData( $TrdId, $tag, $title );
  126.         AUTO.setTrdUpdateFlg();
  127.         return;
  128.     }
  129.  
  130.     //---   タイトルリストに相違がないかどうかチェック   ---//
  131.     $updateFlg = 0;
  132.     $chkList   = [];
  133.     foreach( $a, $titleList ) {
  134.         list.putLast( $chkList, 0 );
  135.     }
  136.     foreach( $a, $dataList ) {
  137.         if( data.getType( list.get1st( $a )) != #NUMBER ) {
  138.             continue;
  139.         }
  140.         $i   = 1;
  141.         $str = list.getNth( $a, 2 );
  142.         foreach( $b, $titleList ) {
  143.             if( $b == $str ) {
  144.                 list.put1st( $a, list.getNth( $noList, $i ));
  145.                 list.put1st( $a, #FALSE );
  146.                 list.delNth( $chkList, $i );
  147.                 list.putNth( $chkList, $i - 1, 1 );
  148.                 exit;
  149.             }
  150.             $i = $i + 1;
  151.         }
  152.     }
  153.  
  154.     //---   掲示板の中に入る   ---//
  155.     $flg = 0;
  156.     foreach( $a, $dataList ) {
  157.         if( data.getType( list.getNth( $a, 1 )) != #CONST ) {
  158.             //---   メニュー構成と相違のあるデータ   ---//
  159.             continue;
  160.         }
  161.         $bbsNo = list.getNth( $a, 2 );
  162.         if( data.getType( list.getNth( $a, 3 )) != #NUMBER ) {
  163.             //---   データベースの構成と相違のあるデータ   ---//
  164.             continue;
  165.         }
  166.         $tagSub    = list.putLast( data.copy( $tag ), list.getNth( $a, 3 ));
  167.         $titleSub  = list.getNth( $a, 4 );
  168.         $upListSub = AUTO.selectUpList( $upList,$mode + 3,list.getNth($a, 3));
  169.         if( data.getType( list.getNth( $a, 6 )) == #LIST ) {
  170.             //---   サブメニューが存在する   ---//
  171.             //---   サブメニューを巡回する必要があるかどうかチェック   ---//
  172.             $statusSub = 0;
  173.             if(( $status & 1 )&&( list.getNth( $a, 5 ) == #TRUE )) {
  174.                 $statusSub = 1;
  175.             }
  176.             if(( $status & 2 )&&( list.size( $upListSub ) != 0 )) {
  177.                 $statusSub = $statusSub | 2;
  178.             }
  179.             if( $statusSub != 0 ) {
  180.                 $ret = Auto.bbsCom( $bbsNo, $titleSub, list.getNth( $a, 6 ),
  181.                                 $tagSub, $mode + 1, $statusSub, $upListSub );
  182.                 if( $ret == #FALSE ) {
  183.                     return( #FALSE );
  184.                 }
  185.                 AUTO.sendCommand("E");
  186.             }
  187.             continue;
  188.         }
  189.  
  190.         //---   掲示板に入る必要があるかどうかチェック   ---//
  191.         $statusSub = 0;
  192.         if(( $status & 1 )&&( list.getNth( $a, 5 ) == #TRUE )) {
  193.             $statusSub = 1;
  194.         }
  195.         if(( $status & 2 )&&( list.size( $upListSub ) != 0 )) {
  196.             $statusSub = $statusSub | 2;
  197.         }
  198.         if( $statusSub == 0 ) {
  199.             //---   入る必要無し   ---//
  200.             continue;
  201.         }
  202.  
  203.         //---   掲示板に入る   ---//
  204.         $srhId   = list.getNth( $a, 6 );
  205.         $day1    = list.getNth( $a, 7 );
  206.         $srhKey  = list.getNth( $a, 8 );
  207.         AUTO.putStr2( $bbsNo );
  208.         $ret = Auto.getBbsMenu( 1 );
  209.         if( $ret == #FALSE ) {
  210.             //---   掲示板に入れなかった   ---//
  211.             return( #FALSE );
  212.         }
  213.  
  214.         if( list.size( list.get1st( $ret )) != 0 ) {
  215.             //---   なぜかサブメニューが存在する   ---//
  216.             $errMsg =  ["掲示板のメニューの構成が相違しています。",
  217.                         "巡回を中断しました。",
  218.                         "データベースファイルを更新しました。",
  219.                         str.join(["掲示板名:", $titleSub], "" )];
  220.             AUTO.error( "掲示板巡回", $errMsg );
  221.             AUTO.sendCommand("E");
  222.             if( trd.count( $TrdId, $tagSub ) != 0 ) {
  223.                 trd.delData( $TrdId, $tagSub );
  224.             }
  225.             if( Auto.makeBbsDataForDB( $bbsNo, $titleSub, $tagSub ) == #FALSE){
  226.                 return( #FALSE );
  227.             }
  228.             AUTO.setTrdUpdateFlg();
  229.             continue;
  230.         }
  231.  
  232.         //---   やっと本処理   ---//
  233.         if( $statusSub & 2 ) {
  234.             //---   アップロード処理   ---//
  235.             foreach( $b, $upListSub ) {
  236.                 $$USER.DEFINED.9 = [$b, 1];
  237.                 $path = str.join([$$DIR.STANDARD,
  238.                                   "AUTO\\SCRIPT\\SENDFILE.MX"], "" );
  239.                 script.openExtern( $path, #FALSE, [] );
  240.                 if( AUTO.getHaltFlg() != 0 ) {
  241.                     return;
  242.                 }
  243.                 if( $$USER.DEFINED.9 == #TRUE ) {
  244.                     AUTO.setSendFlg( $b );
  245.                 }
  246.                 $flg = 1;
  247.             }
  248.         }
  249.  
  250.         if( $statusSub & 1 ) {
  251.             //---   ダウンロード処理   ---//
  252.             AUTO.sendCommand("SET PAGE ON");
  253.  
  254.             //---   読む文書の先頭番号を調べる   ---//
  255.             $no = "";
  256.             $errFlg   = 0;
  257.             $scanMode = -1;
  258.             AUTO.putStr("SCAN\r");
  259.             comtable( $b, 0 ) {
  260.                 interval            { AUTO.haltCheck();    }
  261.                 "BBS>\w\w"            { exit; }    // 一覧表示終わり
  262.                 ">\w\w"            { exit; }    // 一覧表示終わり
  263.                 $AUTO.WAIT60        { AUTO.putStr("\r"); }
  264.                 "検索開始日 ("        { $scanMode = 2; }
  265.                 "検索キー ("        { $scanMode = 3; }
  266.                 "検索ID ("            { $scanMode = 1; }
  267.                 "検索 ("            { $scanMode = 0; }
  268.                 ":\w\w"            {
  269.                     table( $scanMode ) {
  270.                         else{ AUTO.putStr("\r"); $errFlg = 1;                }
  271.                         0    { AUTO.putStr2("1\r");                            }
  272.                         1    { AUTO.putStr2( str.join([$srhId, "\r"], "" ));    }
  273.                         3    { AUTO.putStr2( str.join([$srhKey,"\r"], "" ));    }
  274.                         2    {
  275.                             if( $day1 == "000000" ) {
  276.                                 AUTO.putStr("\r");
  277.                             } else {
  278.                                 AUTO.putStr2( str.join([$day1,"\r"], "" ));
  279.                             }
  280.                         }
  281.                     }
  282.                 }
  283.                 "%b%b%d   %3c%5d  %b%d/%2d   " {// 一覧の見出し部分
  284.                     if( $no == "" ) {
  285.                         if( str.mid( $b, 16, 5 ) != $ToDay1 ) {
  286.                             $no = data.toString( data.toNumber( $b ));
  287.                         }
  288.                     }
  289.                 }
  290.                 "more>\w\w"            {            // 次頁あり
  291.                     if( $no != "" ) {
  292.                         exit;
  293.                     }
  294.                     AUTO.putStr("\r");
  295.                 }
  296.             }
  297.  
  298.             AUTO.putStr2("SET PAGE OFF\r");
  299.             AUTO.waitPrompt2( #TRUE );
  300.             if( $no != "" ) {
  301.                 //---   読む文書がある場合には、それを全部読む   ---//
  302.                 $cmd = str.join([$no, "-\r"], "" );
  303. //$cmd = str.join([$no, "\r"], "" );
  304.                 AUTO.putStr2( $cmd );
  305.                 $ptrSub = file.tell( $LogId );
  306.                 $ptr2   = $ptrSub;
  307.                 comtable( $b, 0 ) {
  308.                     interval     { AUTO.haltCheck();  }
  309.                     $AUTO.WAIT60 { AUTO.putStr("\r"); }
  310.                     "\n" {                        // 行数加算
  311.                         $ptrSub = file.tell( $LogId );
  312.                         $ptr2   = $ptrSub;
  313.                     }
  314.                     "%b%b%d   %3c%5d  %b%d/%2d  " {
  315.                         if( file.tell( $LogId ) == $ptr2 + 23 ) {
  316.                             $ptr   = $ptrSub;        // 見出し部分
  317.                             $title = str.join([$b, str.replaceAll(
  318.                                         com.getString( 0, #TRUE, #TRUE ),
  319.                                                             "\n", "" )], "" );
  320.                         }
  321.                     }
  322.                     "next>\w\w"        {            // 次の文書がある
  323.                         $tagList = data.copy( $tagSub );
  324.                         $cnt = list.size( $tagList );
  325.                         loop {
  326.                             list.putLast( $tagList, -1 );
  327.                             $cnt = $cnt + 1;
  328.                             if( $cnt == 10 ) {
  329.                                 exit;
  330.                             }
  331.                         }
  332.                         AUTO.writeIdx([
  333.                             [0x501,[14,$tagList]],
  334.                             [0x104,[$title]],
  335.                             [0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]] );
  336.                         AUTO.putStr("\r");
  337.                     }
  338.                     ">\w\w"        {            // 表示終了
  339.                         $tagList = data.copy( $tagSub );
  340.                         $cnt = list.size( $tagList );
  341.                         loop {
  342.                             list.putLast( $tagList, -1 );
  343.                             $cnt = $cnt + 1;
  344.                             if( $cnt == 10 ) {
  345.                                 exit;
  346.                             }
  347.                         }
  348.                         AUTO.writeIdx([
  349.                             [0x501,[14,$tagList]],
  350.                             [0x104,[$title]],
  351.                             [0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]] );
  352. //                        AUTO.putStr("\r");
  353. //                        AUTO.sendCommand("E");
  354.                         exit;
  355.                     }
  356.                 }
  357.             }
  358.             list.del1st( $a );
  359.             list.put1st( $a, #TRUE );
  360.             $flg = 2;
  361.         }
  362.         loop {
  363.             if( $flg == 0 ) {
  364.                 exit;
  365.             }
  366.             AUTO.sendCommand("E");
  367.             $flg = $flg - 1;
  368.         }
  369.     }
  370.     Auto.updateBbsData( $dataList );
  371.  
  372.     //---   データベースファイルをアップデートする必要が   ---//
  373.     //---                             有るかどうか調べる   ---//
  374.     //---   まずは削除するデータから   ---//
  375.     $errMsg = [];
  376.     foreach( $a, $dataList ) {
  377.         if( data.getType( list.get1st( $a )) == #CONST ) {
  378.             continue;
  379.         }
  380.         if( data.getType( list.get1st( $a )) != #NUMBER ) {
  381.             continue;
  382.         }
  383.         $tagSub = list.putLast( data.copy( $tag ), list.get1st( $a ));
  384.         if( data.getType( list.getNth( $a, 3 )) == #LIST ) {
  385.             list.putLast( $tagSub, -2 );
  386.         }
  387.         if( trd.count( $TrdId, $tagSub ) != 0 ) {
  388.             trd.delData( $TrdId, $tagSub );
  389.             AUTO.setTrdUpdateFlg();
  390.         }
  391.         if( list.size( $errMsg ) == 0 ) {
  392.             $errMsg =  ["掲示板のメニュー構成に変更がありました。",
  393.                         "データベースファイルを更新しました。"];
  394.             AUTO.error("掲示板巡回", $errMsg );
  395.         }
  396.     }
  397.     //---   追加するデータがあるかどうか   ---//
  398.     $i = 1;
  399.     $j = 1;
  400.     foreach( $a, $chkList ) {
  401.         if( $a == 1 ) {
  402.             $i = $i + 1;
  403.             continue;
  404.         }
  405.         //---   開いているTRDのIDを探す   ---//
  406.         loop {
  407.             $tagSub = list.putLast( data.copy( $tag ), $j );
  408.             if( list.get1st( trd.checkList( $TrdId, $tagSub )) != 0 ) {
  409.                 $j = $j + 1;
  410.                 continue;
  411.             }
  412.             list.putLast( $tagSub, -2 );
  413.             if( list.get1st( trd.checkList( $TrdId, $tagSub )) != 0 ) {
  414.                 $j = $j + 1;
  415.                 continue;
  416.             }
  417.             exit;
  418.         }
  419.         list.delLast( $tagSub );
  420.         if( $flg == 1 ) {
  421.             AUTO.sendCommand("E");
  422.             AUTO.sendCommand("E");
  423.         }
  424.         if( Auto.makeBbsDataForDB( list.getNth( $noList,    $i ),
  425.                                    list.getNth( $titleList, $i ),
  426.                                    $tagSub ) == #FALSE ) {
  427.             return( #FALSE );
  428.         }
  429.         AUTO.setTrdUpdateFlg();
  430.         $i = $i + 1;
  431.         if( list.size( $errMsg ) == 0 ) {
  432.             $errMsg =  ["掲示板のメニュー構成に変更がありました。",
  433.                         "データベースファイルを更新しました。"];
  434.             AUTO.error("掲示板巡回", $errMsg );
  435.         }
  436.     }
  437.     return( #TRUE );
  438. }
  439.  
  440.  
  441.  
  442. //----------------------------------------------------------//
  443. //---   データベースファイルと設定データとの連携を取る   ---//
  444. //----------------------------------------------------------//
  445. function    Auto.connectBbsData( $dataList, $tag ) {
  446.     $retStatus = #FALSE;
  447.  
  448.     //---   便宜上グループのデータから検索   ---//
  449.     $subList = [];
  450.     $tagSub  = list.putLast( data.copy( $tag ), -5 );
  451.     list.putLast( $tagSub, -2 );
  452.     $groupCnt = 0;
  453.     loop {
  454.         $ret = trd.getData( $TrdId, $tagSub );
  455.         if( list.get1st( $ret ) == 0 ) {
  456.             exit;
  457.         }
  458.         $str    = list.getNth( $ret, 2 );
  459.         $tagNo  = list.getNth( list.getNth( $ret, 3 ), list.size( $tag ) + 1 );
  460.         $list   = #FALSE;
  461.         $listCnt = 0;
  462.         foreach( $a, $dataList ) {
  463.             $listCnt = $listCnt + 1;
  464.             if( data.getType( list.getNth( $a, 3 )) != #LIST ) {
  465.                 continue;
  466.             }
  467.             if( list.get1st( $a ) == $str ) {
  468.                 $list = list.getNth( $a, 3 );
  469.                 exit;
  470.             }
  471.         }
  472.         if( $list == #FALSE ) {
  473.             $listCnt = 0;
  474.             $list = [];
  475.             $a    = [$str, #FALSE, $list];
  476.             list.putLast( $subList, $a );
  477.         }
  478.         trd.getDataPush( $TrdId );
  479.         $ret = Auto.connectBbsData($list,list.putLast(data.copy($tag),$tagNo));
  480.         trd.getDataPop( $TrdId );
  481.         if( $ret == #FALSE ) {
  482.             if( $listCnt == 0 ) {
  483.                 list.delLast( $subList );
  484.             } else {
  485.                 list.delNth( $dataList, $listCnt );
  486.             }
  487.         } else {
  488.             $st  = list.get1st( $ret );
  489.             if( $st == #TRUE ) {
  490.                 $retStatus = #TRUE;
  491.             }
  492.             list.delNth( $a, 2 );
  493.             list.putNth( $a, 1, $st );
  494.             list.put1st( $a, $tagNo );
  495.             $groupCnt = $groupCnt + 1;
  496.         }
  497.         $tagSub = [];
  498.     }
  499.  
  500.     //---   実データの検索   ---//
  501.     $tagSub = list.putLast( data.copy( $tag ), -6 );
  502.     $dataCnt = 0;
  503.     loop {
  504.         $ret = trd.getData( $TrdId, $tagSub );
  505.         if( list.get1st( $ret ) == 0 ) {
  506.             exit;
  507.         }
  508.         $dataCnt = $dataCnt + 1;
  509.         $str   = list.getNth( $ret, 2 );
  510.         $tagNo = list.getNth( list.getNth( $ret, 3 ), list.size( $tag ) + 1 );
  511.         $list  = #FALSE;
  512.         foreach( $a, $dataList ) {
  513.             if(( data.getType( list.getNth( $a, 1 )) != #STRING )||
  514.                ( data.getType( list.getNth( $a, 3 )) == #LIST )) {
  515.                 continue;
  516.             }
  517.             if( list.get1st( $a ) == $str ) {
  518.                 if( list.getNth( $a, 4 ) >= $ToDay2 ) {
  519.                     list.delNth( $a, 2 );
  520.                     list.putNth( $a, 1, #FALSE );
  521.                 }
  522.                 if( list.getNth( $a, 2 ) == #TRUE ) {
  523.                     $retStatus = #TRUE;
  524.                 }
  525.                 $list = $a;
  526.                 exit;
  527.             }
  528.         }
  529.         if( $list == #FALSE ) {
  530.             list.putLast( $subList,[$tagNo,$str,#FALSE,"","000000","",-1] );
  531.         } else {
  532.             list.put1st( $a, $tagNo );
  533.         }
  534.         $tagSub = [];
  535.     }
  536.     if(( $groupCnt == 0 )&&( $dataCnt == 0 )) {
  537.         trd.setData( $TrdId, [1,5], "1" );
  538.         $delTag = list.putLast( data.copy( $tag ), -2 );
  539. test.print( $delTag );
  540.         trd.delData( $TrdId, $delTag );
  541.         AUTO.setTrdUpdateFlg();
  542.         return( #FALSE );
  543.     }
  544.  
  545.     //---   データ矛盾のチェックと後処理   ---//
  546.     $errMsg = [];
  547.     if( list.size( $subList ) != 0 ) {
  548.         if( list.size( $dataList ) != 0 ) {
  549.             $errMsg =  ["設定とデータベースファイル間の情報が相違しています。",
  550.                         "設定を再度行って下さい。",
  551.                         "処理は引き続き続行します。"];
  552.         }
  553.         foreach( $a, $subList ) {
  554.             list.putLast( $dataList, $a );
  555.         }
  556.     } else {
  557.         foreach( $a, $dataList ) {
  558.             if( data.getType( list.get1st( $a )) != #NUMBER ) {
  559.                 $errMsg = 
  560.                     ["設定とデータベースファイル間の情報が相違しています。",
  561.                      "設定を再度行って下さい。",
  562.                      "処理は引き続き続行します。"];
  563.                 exit;
  564.             }
  565.         }
  566.     }
  567.     if( list.size( $errMsg ) != 0 ) {
  568.         AUTO.error("掲示板巡回", $errMsg );
  569.     }
  570.     return([$retStatus, $dataList]);
  571. }
  572.  
  573.  
  574.  
  575. //--------------------------------------------------------//
  576. //---   設定ファイルのBBSブロックの日付を更新する   ---//
  577. //--------------------------------------------------------//
  578. function    Auto.updateBbsData( $dataList ) {
  579.     $id = file.open( list.getNth( AUTO.getSetName(), 2 ), "", 1 );
  580.         foreach( $a, $dataList ) {
  581.         if( list.get1st( $a ) != #TRUE ) {
  582.             continue;
  583.         }
  584.         if( data.getType( list.getNth( $a, 6 )) == #LIST ) {
  585.             continue;
  586.         }
  587.         $ptr = list.getNth( $a, 9 );
  588.         if( $ptr != -1 ) {
  589.             file.seek( $id, $ptr, 0 );
  590.             file.putString( $id, $ToDay2 );
  591.         }
  592.     }
  593.     file.close( $id );
  594. }
  595.  
  596.  
  597.  
  598. //--------------------------------//
  599. //---   BBS情報の新規作成   ---//
  600. //--------------------------------//
  601. function    Auto.makeBbsNew() {
  602.     trd.setData( $TrdId, [1,4,-2],"BBS\t掲示板" );
  603.     sys.stopIntRec();
  604.     loop {
  605.         AUTO.putStr("GO BBS\r");
  606.         $errFlg  = 1;
  607.         comtable( $a, 300 ) {
  608.             "GO BBS\n"    { $errFlg = 0; exit; }
  609.             interval    { AUTO.haltCheck();     }
  610.         }
  611.         if( $errFlg == 0 ) {
  612.             exit;
  613.         }
  614.         AUTO.putStr("\r");
  615.         AUTO.waitPrompt( #TRUE );
  616.         continue;
  617.     }
  618.  
  619.     $ret = Auto.getBbsMenu( 0 );
  620.     if( $ret == #FALSE ) {
  621.         //---   掲示板に入れなかった   ---//
  622.         trd.delData( $TrdId, [1,4,-2] );
  623.         return( #FALSE );
  624.     }
  625.     $titleList = list.getNth( $ret, 1 );
  626.     $noList    = list.getNth( $ret, 2 );
  627.  
  628.     $i = 1;
  629.     foreach( $a, $noList ) {
  630.         if( Auto.makeBbsDataForDB( $a, list.getNth($titleList, $i),
  631.                                                     [1,4,$i] ) == #FALSE ) {
  632.             return( #FALSE );
  633.         }
  634.         AUTO.setTrdUpdateFlg();
  635.         $i = $i + 1;
  636.     }
  637.  
  638.     sys.startIntRec();
  639.     return;
  640. }
  641.  
  642.  
  643.  
  644. //----------------------------------------------------------//
  645. //---   データベースファイルにBBSグループを作成する   ---//
  646. //----------------------------------------------------------//
  647. function    Auto.makeBbsDataForDB( $no, $title, $tag ) {
  648.     AUTO.putStr2( $no );
  649.     $ret = Auto.getBbsMenu( 1 );
  650.     if( $ret == #FALSE ) {
  651.         return( #FALSE );
  652.     }
  653.     $titleList = list.getNth( $ret, 1 );
  654.     $noList    = list.getNth( $ret, 2 );
  655.  
  656.     if( list.size( $noList ) == 0 ) {
  657.         //---   サブメニューが存在しない   ---//
  658.         trd.setData( $TrdId, $tag, $title );
  659.         AUTO.sendCommand("E");
  660.         return( #TRUE );
  661.     }
  662.  
  663.     //---   サブメニューが有る場合、サブグループの作成を行う   ---//
  664.     trd.setData( $TrdId, list.putLast( data.copy( $tag ), -2 ), $title );
  665.     $i = 1;
  666.     foreach( $a, $noList ) {
  667.         if( Auto.makeBbsDataForDB( $a, list.getNth( $titleList, $i ),
  668.                         list.putLast( data.copy( $tag ), $i )) == #FALSE ) {
  669.             return( #FALSE );
  670.         }
  671.         $i = $i + 1;
  672.     }
  673.     AUTO.sendCommand("E");
  674.     return;
  675. }
  676.  
  677.  
  678.  
  679. //--------------------------------------//
  680. //---   掲示板のメニューを取得する   ---//
  681. //--------------------------------------//
  682. function    Auto.getBbsMenu( $mode ) {
  683.     $AUTO.WAIT15 = AUTO.getWaitChar( 15 );
  684.     $AUTO.WAIT60 = AUTO.getWaitChar( 60 );
  685.     $tmpList = [];
  686.     $inFlg   = 0;
  687.     comtable( $a, 0 ) {
  688.         "現在、サービスは大変混雑しています。"    {
  689.             AUTO.waitPrompt( #TRUE );
  690.             $errMsg = ["掲示板に入ることが出来ませんでした。",
  691.                        "巡回を中断しました。"];
  692.             AUTO.error("掲示板巡回", $errMsg );
  693.             return( #FALSE );
  694.         }
  695.         interval        { AUTO.haltCheck();  }
  696.         $AUTO.WAIT60    { AUTO.putStr("\r"); }
  697.         "BBS\n"            { $inFlg = 1; }
  698.         ">\w\w"        { exit; }
  699.         ">\w\w"            { exit; }
  700.         "%b%d. "    {
  701.             $str = str.replaceAll( com.getString( 0, #TRUE, #TRUE ), "\n", "");
  702.             $str = str.join([$a, $str], "" );
  703.             list.putLast( $tmpList, $str );
  704.         }
  705.     }
  706.     if(( $mode == 0 )&&( $inFlg == 0 )) {
  707.         //---  掲示板に入れなかった   ---//
  708.         $errMsg = ["掲示板に入ることが出来ませんでした。",
  709.                    "巡回を中断しました。"];
  710.         AUTO.error("掲示板巡回", $errMsg );
  711.         return( #FALSE );
  712.     }
  713.     if( list.size( $tmpList ) == 0 ) {
  714.         //---   メニューが無い   ---//
  715.         return( [[],[]] );
  716.     }
  717.  
  718.     //---   メニューを一つずつに分解する   ---//
  719.     $clm       = str.match( list.get1st( $tmpList ), " 2. ", 0 );
  720.     $titleList = [];
  721.     $noList    = [];
  722.     $i         = 1;
  723.     foreach( $a, $tmpList ) {
  724.         if( str.length( $a ) < $clm + 1 ) {
  725.             $list = [$a];
  726.         } else {
  727.             $list = [str.left($a,$clm),str.right($a,str.length($a)-$clm)];
  728.         }
  729.         foreach( $b, $list ) {
  730.             list.putLast( $noList, str.join([
  731.                 data.toString( data.toNumber( str.left( $b, 2 ))),"\r"],""));
  732.             list.putLast( $titleList,
  733.                 str.replaceAll( str.mid( $b,4,str.length($b)-4 ), " ", "" ));
  734.             $i = $i + 1;
  735.         }
  736.     }
  737.     if( $mode == 0 ) {
  738.         list.del1st( $titleList );
  739.         list.del1st( $noList    );
  740.     }
  741.     return( [$titleList,$noList] );
  742. }
  743.